package test01;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.stream.Stream;

/**
 * @Author czl
 * @Date 2024-04-15
 */
public class MainTest01 {
    public static void main(String[] args) throws Exception {
        // 第一：获取操作类的 Class 对象
        Class<UserService> clazz = UserService.class;

        // 第二：调用相关 API 方法，实现相关的操作
        // 1.获取类中定义的所有方法 - 数组 - Stream
        Method[] methods = clazz.getDeclaredMethods();

        // 2.基于数组，实例化 Stream 对象
        Stream<Method> methods1 = Stream.of(methods);

        // 3.过滤具有 Order 注解的方法
        Stream<Method> methodStream = methods1.filter(t -> t.isAnnotationPresent(Order.class));

        // 4.获取  Order 注解的值，并对其进行排序（升序）
        Stream<Method> sorted = methodStream.sorted((o1, o2) -> {
            // 1）获取注解的值
            int value1 = o1.getAnnotation(Order.class).value();
            int value2 = o2.getAnnotation(Order.class).value();

            // 2）判断返回
            return value1 - value2;
        });

        // 5.映射操作 - 把 Method 对象转换为方法名称的字符串
        Stream<String> nameStream = sorted.map(Method::getName);

        // 6.循环遍历输出
        nameStream.forEach(System.out::println);
    }
}
